// 服务端启动入口
// import { createApp  } from './app'

// export default context => {
//   const { app } = createApp()
//   // 服务端路由处理、数据预取。。。。。。
//   return app
// }

// import { resolve } from '../build/webpack.base.config.js'
// const resolve = file => path.resolve(__dirname, file)
import { createApp } from './app'

export default async context => {
  // 因为有可能是异步路由钩子函数和组件,所有我们将返回一个promise
  // 以便服务器能够等待所有的内容在渲染前就已经准备就绪
  const { app, router, state, store } = createApp()

  const meta = app.$meta()

  // 设置服务器router的位置
  router.push(context.url) // 等价于路由跳转

  context.meta = meta

  // 等待router 将可能的异步组件和钩子函数解析完
  await new Promise(router.onReady.bind(router))
  // const matchedComponents = router.getMatchComponents()
  // // 匹配不到的路由,执行reject 函数,返回404
  // if (!matchedComponents.length) {
  //   return reject({ code: 404 })
  // }

  // 把数据内联到页面模板中
  context.rendered = () => {
    context.state = store.state
  }
  // resolve(app)

  return app
}

// export default context => {
//   // 因为有可能是异步路由钩子函数和组件,所有我们将返回一个promise
//   // 以便服务器能够等待所有的内容在渲染前就已经准备就绪
//   return new Promise(resolve, reject) => {
//     const { app, router } = createApp()

//     // 设置服务器router的位置
//     router.push(context.url) // 等价于路由跳转

//     // 等待router 将可能的异步组件和钩子函数解析完
//     router.onReady(() => {
//       const matchedComponents = router.getMatchComponents()
//       // 匹配不到的路由,执行reject 函数,返回404
//       if (!matchedComponents.length) {
//         return reject({ code: 404 })
//       }

//       // Promise 应该resolve 应用程序实例,以便它可以渲染
//       resolve(app)

//     }, reject)
//   })
// }